package com.tiancheng.trade.merchant.channel.handler.ums.request;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.tiancheng.trade.merchant.dto.requestdto.MerchantPayPivRegVO;
import com.tiancheng.trade.merchant.dto.requestdto.MerchantPayRegVO;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;
import java.util.List;

/**
 * @Author: kellen
 * @Description: 银联商户进件请求，to 银联
 * @Date: create in 2024/11/19 18:41
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class UmsMerchantRegComplexRequest extends UmsMerchantRegBaseRequest implements Serializable {
    /**
     * 对接平台方的用户id 。平台方自己定义，建议与自身用户ID绑定<p>必须<p/>
     */
    @NotBlank(message = "对接平台方的用户id不允许为空")
    @JsonProperty( "accesser_user_id")
    private String accesserUserId;
    /**
     * 注册类型 <p>必须<p/>
     * 00：企业商户
     * 01：个人工商户
     * 02：小微商户
     * 03：机关事业单位或社会团体
     * 05:民办非企业
     */
    @NotBlank(message = "注册类型不允许为空")
    @JsonProperty( "reg_mer_type")
    private String regMerType;
    /**
     * 法人身份证姓名<p>必须<p/>
     */
    @NotBlank(message = "法人身份证姓名不允许为空")
    @JsonProperty( "legal_name")
    private String legalName;
    /**
     * 法人身份证号 <p>必须<p/>
     */
    @NotBlank(message = "法人身份证号不允许为空")
    @JsonProperty( "legal_idcard_no")
    private String legalIdcardNo;
    /**
     * 法人手机号 <p>必须<p/>
     */
    @NotBlank(message = "法人手机号不允许为空")
    @JsonProperty( "legal_mobile")
    private String legalMobile;
    /**
     * 法人邮箱 开通泛账户必传
     */
    @JsonProperty( "legal_email")
    private String legalEmail;
    /**
     * 法人证件开始日期 <p>必须<p/>
     */
    @NotBlank(message = "法人证件开始日期不允许为空")
    @JsonProperty( "legal_card_begin_date")
    private String legalCardBeginDate;
    /**
     * 法人代表证件截止日期 <p>必须<p/>
     */
    @NotBlank(message = "法人代表证件截止日期不允许为空")
    @JsonProperty( "legal_card_deadline")
    private String legalCardDeadline;
    /**
     * 法人性别 企业类型为小微商户时必填，参数按国际标准传
     * 0-未知的性别
     * 1-男性
     * 2-女性
     * 5-女性改（变）为男性    6-男性改（变）为女性    9-未说明的性别
     */
    @JsonProperty( "legal_sex")
    private Integer legalSex;
    /**
     * 法人职业 企业类型为小微商户时必填
     * 0-各类专业、技术人员
     * 1-国家机关、党群组织、企事业单位的负责人
     * 2-办事人员和有关人员
     * 3-商业工作人员
     * 4-服务性工作人员
     * 5-农林牧渔劳动者
     * 6-生产工作、运输工作和部分体力劳动者
     * 7-不便分类的其他劳动者
     */
    @JsonProperty( "legal_occupation")
    private Integer legalOccupation;
    /**
     * 法人家庭地址
     * 商户类型为非小微，beneficiary_list为空，法人作为唯一受益人必填
     */
    private String legalmanHomeAddr;
    /**
     * 商户营业名称 <p>必须<p/>
     */
    @NotBlank(message = "商户营业名称不允许为空")
    @JsonProperty( "shop_name")
    private String shopName;
    /**
     * 开户行行号 <p>必须<p/>
     */
    @NotBlank(message = "开户行行号不允许为空")
    @JsonProperty( "bank_no")
    private String bankNo;
    /**
     * 账户类型 <p>必须<p/>
     * 0:个人账户  1:公司账户
     */
    @NotBlank(message = "账户类型不允许为空")
    @JsonProperty( "bank_acct_type")
    private String bankAcctType;
    /**
     * 开户行帐号 <p>必须<p/>
     */
    @NotBlank(message = "开户行帐号不允许为空")
    @JsonProperty( "bank_acct_no")
    private String bankAcctNo;
    /**
     * 开户帐号名称 <p>必须<p/>
     * 对公账户填写公司名称，需与营业执照名称保持一致
     * 个人账户填写法人姓名
     */
    @NotBlank(message = "开户帐号名称不允许为空")
    @JsonProperty( "bank_acct_name")
    private String bankAcctName;
    /**
     * 营业省份id <p>必须<p/>
     */
    @NotBlank(message = "营业省份id不允许为空")
    @JsonProperty( "shop_province_id")
    private String shopProvinceId;
    /**
     * 营业市id <p>必须<p/>
     */
    @NotBlank(message = "营业市id不允许为空")
    @JsonProperty( "shop_city_id")
    private String shopCityId;
    /**
     * 营业区id <p>必须<p/>
     */
    @NotBlank(message = "营业区id不允许为空")
    @JsonProperty( "shop_country_id")
    private String shopCountryId;

    @NotBlank(message = "营业地址补充信息不能为空")
    @JsonProperty("shop_addr_ext")
    private String shopAddrExt;
    /**
     * 社会信用统一代码/营业执照号
     * 00：企业商户（必填）
     * 01：个人工商户（必填）
     * 02：小微商户（选填）
     * 03：机关事业单位或社会团体（必填）
     */
    @JsonProperty( "shop_lic")
    private String shopLic;
    /**
     * 行业类别编码
     */
    @NotNull(message = "行业类别编码不允许为空")
    @JsonProperty( "mccCode")
    private Integer mccCode;
    /**
     * 是否连锁商户
     * 是否连锁商户，0是，1否
     */
    @NotNull(message = "是否连锁商户不能为空")
    private String isChain="0";
    /**
     * 控股股东姓名
     */
    private String shareholderName;
    /**
     * 控股股东证件号，控股股东身份证
     */
    private String shareholderCertno;
    /**
     * 控股股东证件证件类型:1 身份证
     */
    private String shareholderCertType;
    /**
     * 控股股东证件开始日期
     */
    private String shareholderCertBeginDate;
    /**
     * 控股股东证件有效期
     */
    private String shareholderCertExpire;
    /**
     * 控股股东家庭地址
     */
    private String shareholderHomeAddr;
    /**
     * 申请开通的能力
     */
    @JsonProperty( "product")
    private List<MerchantPayRegVO.MerchantPayRegProduct> product;

    @Data
    public static class MerchantPayRegProduct{
        /**
         * 开通业务id
         * 常用：
         * 0-银联卡（1）
         * 1-全民付（86）
         * 2-POS通（68）
         * 4-营销联盟（40）
         * 8-公共支付-通用（9）
         * 16-代付业务（74）
         * 21-统一会员卡（37）
         * in1-APP支付（in1）
         * in2-H5支付（in2）
         * in3-公众号支付（in3）
         * in4-小程序支付（in4）
         */
        @JsonProperty( "product_id")
        private String productId;
    }

    /**
     * 商户进件上传的证件照
     */
    @JsonProperty( "pic_list")
    private List<MerchantPayPivRegVO> picList;

    @Data
    public static class MerchantIdPic{
        /**
         * 上传图片类型
         */
        @JsonProperty( "document_type")
        private String documentType;
        /**
         * 图片名称
         */
        @JsonProperty( "document_name")
        private String documentName;
        /**
         * 图片路径
         */
        @JsonProperty( "file_path")
        private String filePath;
        /**
         * 图片大小
         */
        @JsonProperty( "file_size")
        private String fileSize;
    }

    /**
     * 受益人列表
     */
    private List<Bnf> bnfList;

    /**
     * 受益人信息
     */
    @Data
    public static class Bnf{
        /**
         * 受益人姓名
         */
        private String bnfName;
        /**
         * 受益人证件号
         */
        private String bnfCertno;
        /**
         * 受益人证件开始日期
         */
        private String bnfCertBeginDate;
        /**
         * 受益人证件有效期
         */
        private String bnfCertExpire;
        /**
         * 受益人证件类型：1、身份证
         */
        private String bnfCertType;
        /**
         * 受益人家庭地址
         */
        private String bnfHomeAddr;
    }
}
